package com.tledu.methods;

public class RecursiveCall {
    public static void main(String[] args) {
//        System.out.println(recursion(999));
//        System.out.println(sum(5));
        System.out.println(args);
        System.out.println(fibonacci(8));
        String[] arrs = {"one", "two"};
    }

    // 大家注意递归调用一定要有出口，否则会出现堆栈溢出的问题
    public static int recursion(int i) {
        // 给程序增加了一个出口
        if (i < 0) {
            return 0;
        }
        i += recursion(i - 1);
        return i;
    }

    // 本质上就是自己调用自己
    // 请和 给定数字5 ，求 5+4+3+2+1 +0
    public static int sum(int i) {
        if (i > 0) {
            i += sum(i - 1); // 5 + sum(4)
        }
        return i;
    }
    // 5 + sum(4) = 15
    // 4 + sum(3) = 10
    // 3 + sum(2) = 6
    // 2 + sum(1) = 3
    // 1 + sum(0) = 1
    // 0
    // 实现阶乘，也是一样的效果

    /**
     * 获取第n个斐波那契数列的值
     *
     * @param n 需要获取的是第几个
     * @return 第n个斐波那契数列的值
     */
    public static int fibonacci(int n) {
        if (n == 1 || n == 2) {
            return 1;
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
}
